When storing data in a storage system, a file system on a host can maintain a table of logical block addresses (LBAs) and send commands to the storage system to write data in an available LBA. The storage system can map the LBA received from the host to a physical address in memory and store the data therein. When writing one or more sequential streams of data, the host's file system can allocate a sequential set of available LBAs to each stream to store the stream's data. It is possible that the allocated sequential set of available LBAs will not be large enough to store the stream of data. If the host's file system detects that the next LBA it needs to write the stream's data is outside of the allocated range (e.g., because the next LBA is occupied or is out of the storage system's capacity), the host's file system can perform a host-side garbage collection operation by sending move commands to the storage system to generate free LBAs to continue the sequential write operation.